//给你一个由 '('、')' 和小写字母组成的字符串 s。
//
// 你需要从字符串中删除最少数目的 '(' 或者 ')' （可以删除任意位置的括号)，使得剩下的「括号字符串」有效。
//
// 请返回任意一个合法字符串。
//
// 有效「括号字符串」应当符合以下 任意一条 要求：
//
//
// 空字符串或只包含小写字母的字符串
// 可以被写作 AB（A 连接 B）的字符串，其中 A 和 B 都是有效「括号字符串」
// 可以被写作 (A) 的字符串，其中 A 是一个有效的「括号字符串」
//
//
//
//
// 示例 1：
//
//
//输入：s = "lee(t(c)o)de)"
//输出："lee(t(c)o)de"
//解释："lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。
//
//
// 示例 2：
//
//
//输入：s = "a)b(c)d"
//输出："ab(c)d"
//
//
// 示例 3：
//
//
//输入：s = "))(("
//输出：""
//解释：空字符串也是有效的
//
//
//
//
// 提示：
//
//
// 1 <= s.length <= 10⁵
// s[i] 可能是 '('、')' 或英文小写字母
//
//
// Related Topics 栈 字符串 👍 216 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function minRemoveToMakeValid(s: string): string {

    /*

     */
    let res = s.split("")
    let stack : number[] = []
    for (let i = 0; i < s.length; i++) {
        if (s.charAt(i) === '(') {
            stack.push(i)
        }
        else if (s.charAt(i) === ')') {
            //? 存在即必是(
            if (stack.length) stack.pop()
            else delete res[i]
        }
    }
    //? 剩的都是没有)匹配的(
    while (stack.length) {
        delete res[stack[stack.length - 1]]
        stack.pop()
    }
    //? delete方法不会改变数组长度，但删除的那个位置会变成'undefined'，所以需要filter一下
    res = res.filter((item) => item);
    return res.join('')

};
//leetcode submit region end(Prohibit modification and deletion)
